Дневниковые записи представляют собой интересный текстовый материал для сентимент анализа и тематического моделирования. В качестве датасета мной были выбраны дневники Вирджинии Вулф за период с 1918 по 1941 год (в переводе на русский язык). Подготовка данных включала загрузку текста дневников в формате txt, деление сплошного текста на отдельные файлы по годам написания и лемматизацию с использованием Mystem (для сентимент анализа), а также деление по году и дню недели написания (для тематического моделирования).
Основной целью проекта ставится оценка возможности применения словарных методов сентимент анализа и структурного тематического моделирования к материалу личных дневников. Проведя анализ текстов с применением данных методов, выясним, коррелируют ли полученные результаты с нашим знанием о материале как читателей.
Посмотрим общую статистику по объему текстов
## Corpus consisting of 21 documents, showing 21 documents:
##
## Text Types Tokens Sentences
## woolf_lemm_1918 2102 8086 35
## woolf_lemm_1920 959 2824 17
## woolf_lemm_1921 1363 4809 20
## woolf_lemm_1922 1358 5102 36
## woolf_lemm_1923 1544 6132 35
## woolf_lemm_1925 1521 5524 30
## woolf_lemm_1926 1765 7433 43
## woolf_lemm_1927 1827 7157 18
## woolf_lemm_1928 2523 11700 65
## woolf_lemm_1930 1329 4706 19
## woolf_lemm_1931 1254 4460 19
## woolf_lemm_1932 1505 5418 33
## woolf_lemm_1933 2088 8644 53
## woolf_lemm_1934 1900 7852 44
## woolf_lemm_1935 2290 9914 74
## woolf_lemm_1936 1163 4467 20
## woolf_lemm_1937 1379 5075 28
## woolf_lemm_1938 2211 8843 73
## woolf_lemm_1939 1474 4837 33
## woolf_lemm_1940 3155 15128 120
## woolf_lemm_1941 649 1511 9
Токенизируем, выполним предобработку, создадим объект dfm
## Document-feature matrix of: 21 documents, 10,454 features (85.29% sparse) and 0 docvars.
## features
## docs понедельник август решать дожидаться покупка новый тетрадь
## woolf_lemm_1918 5 4 1 1 1 4 4
## woolf_lemm_1920 2 1 1 0 0 4 0
## woolf_lemm_1921 5 4 3 0 0 1 0
## features
## docs записывать старый свой
## woolf_lemm_1918 5 10 28
## woolf_lemm_1920 0 2 4
## woolf_lemm_1921 4 6 13
## [ reached max_ndoc ... 18 more documents, reached max_nfeat ... 10,444 more features ]
Визуализируем самые частотные слова:
Среди самых частотных видим слова “книга”, “читать”, “думать”, “мысль”, “написать”, “слово”, что ярко отражает род деятельности автора дневников.
Получим объект типа “quanteda dictionary”
## Dictionary object with 2 key entries.
## - [positive]:
## - авторитет, авторитетность, авторитетный, адаптационный, адаптация, адаптивность, адаптивный, адаптироваться, адекватность, адекватный, аккуратист, аккуратистка, аккуратность, аккуратный, активность, активный, актуальность, актуальный, ангел, ангельский [ ... and 3,422 more ]
## - [negative]:
## - аборт, абортивный, абракадабра, абсурд, абсурдность, абсурдный, авантюра, авантюризм, авантюрист, авантюристический, авантюристка, авантюристский, авантюрный, аварийность, аварийный, авария, авиакатастрофа, авиакрушение, авианалет, авиаудар [ ... and 9,452 more ]
## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
## features
## docs positive negative
## woolf_lemm_1918 0.5748031 0.4251969
## woolf_lemm_1920 0.5169082 0.4830918
## woolf_lemm_1921 0.5029412 0.4970588
## woolf_lemm_1922 0.5954416 0.4045584
## woolf_lemm_1923 0.5612536 0.4387464
## woolf_lemm_1925 0.5000000 0.5000000
## woolf_lemm_1926 0.5492958 0.4507042
## woolf_lemm_1927 0.5126437 0.4873563
## woolf_lemm_1928 0.5000000 0.5000000
## woolf_lemm_1930 0.4596491 0.5403509
## woolf_lemm_1931 0.5473251 0.4526749
## woolf_lemm_1932 0.4227405 0.5772595
## woolf_lemm_1933 0.4827586 0.5172414
## woolf_lemm_1934 0.5053079 0.4946921
## woolf_lemm_1935 0.5034722 0.4965278
## woolf_lemm_1936 0.4557377 0.5442623
## woolf_lemm_1937 0.5245902 0.4754098
## woolf_lemm_1938 0.4896194 0.5103806
## woolf_lemm_1939 0.3876221 0.6123779
## woolf_lemm_1940 0.4514107 0.5485893
## woolf_lemm_1941 0.4423077 0.5576923
Построим график
На графике видим, что записи 1922 года выделяются как наиболее позитивные, что прослеживается и при чтении текста: в 1922 Вирджиния Вулф с воодушевлением пишет о выходе нового романа “Комната Джейкоба”, о своем философском взгляде на критику, которая более ее не тревожит, о (несвойственном ей) приподнятом состоянии духа.
Тон записей последних лет жизни писательницы скорее негативный: она часто упоминает военные события, говорит об упадке сил, о тяжести писательского труда и своей усталости от него.
Переведем результаты в шкалу (-1, +1) и построим график
“Скачки” показателей сентимента коррелируют с историей жизни писательницы, которая страдала от ментальных расстройств и чье настроение и взгляды на жизненные события менялись от воодушевления до полного упадка, что отражалось и в ее дневнике.
Найденные в текстах положительные слова
Найденные в текстах негативные слова
Можно заметить, что в топ списков попали некоторые слова, значения которых сильно зависят от контекста и их нельзя одозначно отнести к позитивными или негативным. Например, это слова “старый”, “великий”, “воскресение” и ряд других.
Посмотрим на их контексты, чтобы оценить, насколько отнесение этих слов к положительным или отрицательным релевантно для исследуемых данных. Проверены контексты для слов “старый”, “великий”, “воскресение”, “внешний”, “понимать”, “зеленый”, “легкий”, “вчерашний”. Выведем только некоторые примеры контекстов.
Изменим словари, убрав некоторые слова, контексты которых не совпадают с меткой, но встречаются часто и вносят значительный вклад в сентимент, чтобы повысить точность анализа.
Выполним анализ по тому же алгоритму, но с отредактированным словарем.
В целом, изменения в результатах получились незначительные. Посмотрим на числовые значения:
Анализ с базовым словарем
## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
## features
## docs positive negative
## woolf_lemm_1918 0.5748031 0.4251969
## woolf_lemm_1920 0.5169082 0.4830918
## woolf_lemm_1921 0.5029412 0.4970588
## woolf_lemm_1922 0.5954416 0.4045584
## woolf_lemm_1923 0.5612536 0.4387464
## woolf_lemm_1925 0.5000000 0.5000000
## woolf_lemm_1926 0.5492958 0.4507042
## woolf_lemm_1927 0.5126437 0.4873563
## woolf_lemm_1928 0.5000000 0.5000000
## woolf_lemm_1930 0.4596491 0.5403509
## woolf_lemm_1931 0.5473251 0.4526749
## woolf_lemm_1932 0.4227405 0.5772595
## woolf_lemm_1933 0.4827586 0.5172414
## woolf_lemm_1934 0.5053079 0.4946921
## woolf_lemm_1935 0.5034722 0.4965278
## woolf_lemm_1936 0.4557377 0.5442623
## woolf_lemm_1937 0.5245902 0.4754098
## woolf_lemm_1938 0.4896194 0.5103806
## woolf_lemm_1939 0.3876221 0.6123779
## woolf_lemm_1940 0.4514107 0.5485893
## woolf_lemm_1941 0.4423077 0.5576923
Анализ с модифицированным словарем
## Document-feature matrix of: 21 documents, 2 features (0.00% sparse) and 0 docvars.
## features
## docs positive negative
## woolf_lemm_1918 0.5847458 0.4152542
## woolf_lemm_1920 0.5128205 0.4871795
## woolf_lemm_1921 0.5000000 0.5000000
## woolf_lemm_1922 0.6017964 0.3982036
## woolf_lemm_1923 0.5644172 0.4355828
## woolf_lemm_1925 0.5048860 0.4951140
## woolf_lemm_1926 0.5601023 0.4398977
## woolf_lemm_1927 0.5122549 0.4877451
## woolf_lemm_1928 0.5045593 0.4954407
## woolf_lemm_1930 0.4518519 0.5481481
## woolf_lemm_1931 0.5497835 0.4502165
## woolf_lemm_1932 0.4184615 0.5815385
## woolf_lemm_1933 0.4886128 0.5113872
## woolf_lemm_1934 0.4954128 0.5045872
## woolf_lemm_1935 0.4981343 0.5018657
## woolf_lemm_1936 0.4394464 0.5605536
## woolf_lemm_1937 0.5138889 0.4861111
## woolf_lemm_1938 0.4925373 0.5074627
## woolf_lemm_1939 0.3758621 0.6241379
## woolf_lemm_1940 0.4465692 0.5534308
## woolf_lemm_1941 0.4090909 0.5909091
Загрузим нелемматизированные тексты, разделенные не только по годам, но и по дням недели. Из названий файлов извлечем год и день написания текста в качестве метаданных.
Выполним предобработку текстов: сделаем перменные year и day факторными, токенизируем и добавим к токенам коллокации.
## [1] "1918" "1920" "1921" "1922" "1923" "1925" "1926" "1927" "1928" "1930"
## [11] "1931" "1932" "1933" "1934" "1935" "1936" "1937" "1938" "1939" "1940"
## [21] "1941"
## [1] "Воскресенье" "Вторник" "Понедельник" "Пятница" "Среда"
## [6] "Суббота" "Четверг"
Частотные коллокации:
Построим несколько моделей и выясним, какое значение K будет наиболе удачным.
## K exclus semcoh heldout residual bound lbound em.its
## 1 5 8.778711 -74.20997 -7.213885 1.478321 -208445.9 -208441.1 500
## 2 10 8.48618 -79.86311 -7.479336 1.396058 -203892.9 -203877.8 71
## 3 15 8.59059 -78.94662 -7.57518 1.330282 -199854.4 -199826.5 112
## 4 20 8.685426 -85.40046 -7.824354 1.335397 -196183.7 -196141.3 131
Также посмотрим coherence/exclusivity tradeoff.
Построим модели с более коротким шагом.
## K exclus semcoh heldout residual bound lbound em.its
## 1 10 8.48618 -79.86311 -7.479336 1.396058 -203892.9 -203877.8 71
## 2 11 8.356532 -76.49332 -7.414918 1.345695 -202748.2 -202730.7 63
## 3 12 8.504556 -75.75928 -7.652501 1.326295 -201938.9 -201918.9 49
## 4 13 8.441822 -75.04542 -7.606648 1.341931 -201016.5 -200993.9 91
## 5 14 8.430957 -74.61999 -7.582814 1.330484 -200501.6 -200476.4 45
## 6 15 8.59059 -78.94662 -7.57518 1.330282 -199854.4 -199826.5 112
## 7 16 8.533622 -79.68609 -7.668532 1.318835 -199054.9 -199024.2 103
Проведенные эксперименты с различной комбинацией аргументов (K и prevalence), которые не отражены здесь в целях экономии, показали, что наиболее удачным числом тем оказалось 14, а включение переменной day в качестве ковариаты улучшения результатов не дало.
Построим модель для K = 14
Подробнее посмотрим на слова, характеризующие топики:
## Topic 1 Top Words:
## Highest Prob: жизни, однако, время, что-то, думаю, смерть, могла
## FREX: смерть, однажды, клайв, постели, великое, поднимается, полный
## Lift: поднимается, полный, однажды, клайв, готова, воспоминаний, пришли
## Score: поднимается, однажды, полный, провал, клайв, воспоминаний, литтон
## Topic 2 Top Words:
## Highest Prob: очень, говорит, люди, должны, который, словно, роман
## FREX: думает, ужасно, ними, морган, воскресенье_марта, говорит, моргана
## Lift: воскресенье_марта, перечитать, понравится, касается, разговаривали, отчего, ногах
## Score: воскресенье_марта, разговаривали, моргана, ними, читал, думает, понравится
## Topic 3 Top Words:
## Highest Prob: люди, очень, дом, окна, дома, ветер, дождь
## FREX: едем, окна, кровати, деревья, река, ветер, кругом
## Lift: понедельник_февраля, дороги, ярких, наверху, река, деревья, кругом
## Score: понедельник_февраля, едем, дороги, деревья, окна, кругом, стояли
## Topic 4 Top Words:
## Highest Prob: думаю, однако, миссис, никаких, должна, книги, шары
## FREX: лондона, шары, лесли, etc, библиотеке, никаких, гинеи
## Lift: приняла, лесли, библиотеке, лондона, тремя_гинеями, браться, правильное
## Score: приняла, лесли, библиотеке, шары, джон, лондонской, клянусь
## Topic 5 Top Words:
## Highest Prob: закончила, пока, года, вчера, слишком, получится, знаю
## FREX: закончила, получится, года, целиком, часть, июля, это_время
## Lift: целиком, закончила, последняя_глава, тему, получится, каждое_утро, свободно
## Score: целиком, закончила, года, каждое_утро, волн, последняя_глава, тему
## Topic 6 Top Words:
## Highest Prob: слишком, пишу, однако, очень, нужно, лишь, думаю
## FREX: которое, дети, слишком, пятница_февраля, чувствовать, котором, часто
## Lift: пятница_февраля, биографию, н.с, художественную_прозу, критикой, свои_мозги, создать
## Score: пятница_февраля, н.с, продолжаю, биографию, дети, веши, размышления
## Topic 7 Top Words:
## Highest Prob: думаю, писать, могу, время, страниц, книгу, хочу
## FREX: ноября, переписывать, страниц, слов, начала, волны, прочитать
## Lift: довела, придать, справиться, переписывать, понятия, ноября, предстоит
## Score: довела, справиться, придать, плохой, форме, среда_августа, возьмусь
## Topic 8 Top Words:
## Highest Prob: должна, писать, очень, могу, будут, буду, написать
## FREX: должна, мозги, будут, гранки, порядок, такую, говорю
## Lift: порядок, кровь, планирую, мозги, осень, тяжелая_работа, отчаяние
## Score: порядок, гранки, мозги, отчаяние, глава, будут, такую
## Topic 9 Top Words:
## Highest Prob: нравится, думаю, слишком, хочу, однако, писать, пишу
## FREX: нравится, таймс, эссе, пусть, миссис_вулф, роде, прозу
## Lift: нравится, красоту, судьба, ожидала, собственных, продали, детей
## Score: нравится, ожидала, роде, красоту, рецензии, миссис_вулф, судьба
## Topic 10 Top Words:
## Highest Prob: очень, гарди, однако, время, немного, почему, читать
## FREX: гарди, слегка, спросила, мужчина, глазами, романы, марри
## Lift: слегка, якобы, гарди, спросил, марри, мужчина, привычка
## Score: слегка, гарди, спросила, мужчина, искусства, молодые, глазами
## Topic 11 Top Words:
## Highest Prob: день, очень, вчера, могу, книга, лондон, итак
## FREX: лондон, ужас, роджер, причина, никакого, день, налета
## Lift: причина, налета, мальчик, страх, гул, делала, ужас
## Score: причина, налета, лондон, гул, площади, мальчик, дефо
## Topic 12 Top Words:
## Highest Prob: могу, голове, очень, думаю, однако, писать, день
## FREX: могу_писать, сцену, голове, форму, ужать, хороший, знак
## Lift: перепечатываю, среда_февраля, ужать, материал, сих_пор, головы, сохранить
## Score: среда_февраля, перепечатываю, ужать, форму, могу_писать, настоящая, выйдет
## Topic 13 Top Words:
## Highest Prob: могу, лишь, воскресенье, пока, книги, думаю, время
## FREX: воскресенье, ужасное, августа, ритм, лето, одного, людьми
## Lift: ужасное, ритм, странная, дочери, бесконечно, августа, написана
## Score: ужасное, ритм, августа, воскресенье, написана, мотыльки, сумею
## Topic 14 Top Words:
## Highest Prob: очень, словно, часа, пока, одну, думаю, цвета
## FREX: часа, цвета, короля, пустоши, четыре, обед, удивительно
## Lift: короля, красного, беседа, огнем, оказалось, камина, могу_представить
## Score: короля, цвета, оказалось, пустоши, огнем, наше, беседа
А также на распределение топиков по годам:
Обратим внимание на 1922 и 1939 годы, которые выделились по сентименту. В 1922 году преобладают темы 2 и 9. Посмотрим на представляющие их слова:
Topic 2
Topic 9
Можно предположить, что Тема 2 связана с отношением людей, прежде всего критиков, к творчеству писательницы. Тема 9 - с ее собственным отношением к писательству. В 1922 году она действительно пишет о любви к своему делу и вдохновении, что непосрдественно связано и с отзывами со стороны читателей. Заметим, что Тема 9 в 1930-е годы почти не представлена и этому периоду также соответствуют более негативные показатели сентимента.
В 1939-1941 выделяется Тема 11, ключевые слова которой позволяют предположить, что она связана с войной. Однако она также представлена и в более ранние годы, что не позволяет проинтерпретировать ее как только военную.
Topic 11
Хорошо интерпретируемой оказалась Тема 3, связанная с поедзками.
Topic 3
В Теме 5 удачно выделилсь словоформы прошедшего времени, поэтому можно связать ее с часто встречающимися в дневниках записями о завершении работы над романом или другим произведением.
Topic 5
Проведенный анализ позволяет получить общее представление о тоне и тематике дневниковых записей Вирджинии Вулф: “скачки” значений сентимента хорошо коррелируют с жизненной историей писательницы, которая страдала от ментальных расстройств и часто впадала в апатию, периодически сменяющуюся воодушевлением. При прочтении текстов можно заметить, что первая половина записей (примерно до 1931 года) действительно тяготеет к положительной тональности, тогда как записи последних лет жизни писательницы более негативны, что отразилось на графиках.
Многие записи в дневнике тематически однообразны, поэтому было сложно получить непересекающиеся топики. Однако основные темы, такие как “размышления”, “писательство”, “тяготы писательского труда”, “дом и путешествия”, так или иначе отразились в полученных топиках и представляющих их словах.
В дневниках писателей сохраняется много образности, они приближены к художественному тексту в силу рода деятельности автора, поэтому стоит помнить о сохраняющихся сложностях анализа: словарный подход не “улавливает” языковую игру, метафоричные конструкции, иронию (коей в записях Вирджинии Вулф не мало). Однако стоит упомянуть, что ранее на этом же материале мы проводили сентимент анализ с использованием модели bert_rus_sentiment и ручная оценка показала, что словарный подход дал более точный результат.